﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DataAccess;
using QuanLyKhachSan.Validation;
using System.Linq.Expressions;

namespace QuanLyKhachSan
{
    public class ThietBiPhongManager:IValidator<ThietBiPhong>,ILenhThucThi<ThietBiPhong>
    {
        public ValidateResult Validate(ThietBiPhong obj)
        {
            ValidateResult vResult =new ValidateResult();
            if (obj.MaTB.Trim()=="TB")
            {
                vResult.Message.Add("Chưa nhập mã thiết bị");
            }
            else
            {
                if (obj.MaTB.Length<5)
                {
                    vResult.Message.Add("Mã thiết bị phải đầy đủ 5 kí tự");
                }
                if (obj.TenTB.Trim().Contains(' '))
                {
                    vResult.Message.Add("Mã thiết bị không được phép chứa kí tự khoảng trắng");
                }
            }
            if (obj.TenTB == "")
            {
                vResult.Message.Add("Chưa nhập vào tên thiết bị");
            }
            if (obj.DonVi.Trim()=="")
            {
                vResult.Message.Add("Chưa nhập đơn vị tính");
            }
            if (obj.SoLuong <= 0)
            {
                vResult.Message.Add("Số lượng nhập vào phải lớn hơn 0");
            }
            if (obj.MaLoaiPhong.Trim() == "")
            {
                vResult.Message.Add("Chưa nhập mã loại phòng");
            }
            return vResult;
        }

        public ActionResult Them(ThietBiPhong obj)
        {
            ActionResult aResult=new ActionResult();
            using (QLKhachSanContext context = new QLKhachSanContext())
            {
                var query = from tbp in context.ThietBiPhongs
                            where tbp.MaTB == obj.MaTB
                            select tbp;
                if (query.Any())
                {
                    aResult.Exceptions.Add(new Exception("Mã thiết bị vừa nhập đã tồn tại trong CSDL: "+obj.MaTB));
                }
                else
                {
                    try
                    {
                        context.ThietBiPhongs.Add(obj);
                        context.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        aResult.Exceptions.Add(ex);
                    }
                }
            }
            return aResult;
        }

        public ActionResult Xoa(string ma)
        {
            ActionResult aResult = new ActionResult();
            using (QLKhachSanContext context = new QLKhachSanContext())
            {
                try
                {
                    var query = (from tbp in context.ThietBiPhongs
                                 where tbp.MaTB == ma
                                 select tbp).FirstOrDefault();
                    context.ThietBiPhongs.Remove(query);
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    aResult.Exceptions.Add(ex);
                }
            }
            return aResult;
        }

        public ActionResult CapNhat(ThietBiPhong obj)
        {
            ActionResult aResult = new ActionResult();
            using (QLKhachSanContext context = new QLKhachSanContext())
            {
                try
                {
                    var query = (from tbp in context.ThietBiPhongs
                                 where tbp.MaTB == obj.MaTB
                                 select tbp).FirstOrDefault();
                    query.TenTB = obj.TenTB;
                    query.SoLuong = obj.SoLuong;
                    query.ThietBiCoDinh = obj.ThietBiCoDinh;
                    query.DonVi = obj.DonVi;
                    query.MaLoaiPhong = obj.MaLoaiPhong;
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    aResult.Exceptions.Add(ex);
                }
            }
            return aResult;
        }

        public ActionResultAsList<ThietBiPhong> LayDanhSach()
        {
            ActionResultAsList<ThietBiPhong> aResult = new ActionResultAsList<ThietBiPhong>();
            using (QLKhachSanContext context = new QLKhachSanContext())
            {
                var query = from tbp in context.ThietBiPhongs
                            select tbp;
                aResult.Result = query.ToList<ThietBiPhong>();
                if (!query.Any())
                {
                    aResult.Exceptions.Add(new Exception("Không có thiết bị phòng nào trong danh sách"));
                }
            }
            return aResult;
        }

        public ActionResultAsList<ThietBiPhong> TimKiemTheoDK(Expression<Func<ThietBiPhong,bool>> predicate)
        {
            ActionResultAsList<ThietBiPhong> aResult = new ActionResultAsList<ThietBiPhong>();
            QLKhachSanContext context = new QLKhachSanContext();
            var query = (from tbp in context.ThietBiPhongs
                        select tbp).Where(predicate);
            aResult.Result = query.ToList<ThietBiPhong>();
            if (!query.Any())
            {
                aResult.Exceptions.Add(new Exception("Không có thiết bị phòng nào thỏa điều kiện"));
            }
            return aResult;
        }

        public ActionResult Xoa(ThietBiPhong ma)
        {
            throw new NotImplementedException();
        }
    }
}
